====
4.下列说法错误的是 (BC)[多选]
A.当top等于数组的大下标值时则栈满
B.栈不能对输入序列部分或全局起求逆作用
C.top=0 时为空栈,元素进栈时指针 top 不断地减 1
D.利用一组地址连续的存储单元依次存放自栈底到栈顶的数据元素,这种形式的栈也称为顺序栈
解析：B错误，top= -1时为空栈，top=0只能说明栈中只有一个元素，并且元素进栈时top应该自增。
D错误，栈的特性（先进后出）就决定了可以作为求逆元素的辅助空间。所谓求逆运算就是ABC依次入栈，输入CBA。
权重：中

====
8.向一个栈顶指针为h的带头结点的链栈中插入指针s所指的结点时,应执行(D)
A.h->next=s;
B.s->next=h;
C.s->next=h;h->next=s;
D.s->next=h->next;h->next=s;
权重：中

====
22.设栈S和队列Q的初始状态均为空，元素a,b,c,d,e,f,g依次进入栈S。若每个元素出栈后立即进入推列Q，且7个元素出队的顺序是b,d,c,f,e,a,g，则栈S的容量至少是?（C）
A 1
B 2
C 3
D 4
权重：较高

====
3.Heap与Stack的差别？
答案：Heap是堆，Stack是栈。
Stack的空间由系统自动分配/释放，Heap上的空间手动分配/释放。
Stack空间有限，Heap是很大的自由存储区，malloc函数分配的内存空间即在堆上。
网上经典例子：
int a = 0; //全局初始化区 
char *p1; //全局未初始化区 
void main(void)
{
  int b; //栈 
  char s[] = "abc"; //栈 
  char *p2; //栈 
  char *p3 = "123456"; //123456\0在常量区，p3在栈上
  static int c =0; //全局（静态）初始化区 
  p1 = (char *)malloc(10); //堆 
  p2 = (char *)malloc(20); //堆 
}
权重：高

====
15、堆和栈的区别  
一、预备知识—程序的内存分配
      一个由c/C++编译的程序占用的内存分为以下几个部分
      1、栈区（stack）— 由编译器自动分配释放 ，存放函数的参数值，局部变量的值等。其操作方式类似于数据结构中的栈。
      2、堆区（heap） — 一般由程序员分配释放， 若程序员不释放，程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事，分配方式倒是类似于链表。
      3、全局区（静态区）（static）—，全局变量和静态变量的存储是放在一块的，初始化的全局变量和静态变量在一块区域， 未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。 - 程序结束后有系统释放
      4、文字常量区—常量字符串就是放在这里的。 程序结束后由系统释放
      5、程序代码区—存放函数体的二进制代码。
权重：较高

====
2．Heap与stack的差别。
Heap是堆，stack是栈。
Stack的空间由操作系统自动分配/释放，Heap上的空间手动分配/释放。
Stack空间有限，Heap是很大的自由存储区
C中的malloc函数分配的内存空间即在堆上,C++中对应的是new操作符。
程序在编译期对变量和函数分配内存都在栈上进行,且程序运行过程中函数调用时参数的传递也在栈上进行
权重：较高

====
6.堆栈溢出一般是由什么原因导致的？
      没有回收垃圾资源。
      函数内数组太大超过总大小。
权重：较高



